package improve;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2023-03-02
 * Time: 11:25
 */

//改进
public class Liskov {
    public static void main(String[] args) {
        A a = new A();
        System.out.println("11-3= " + a.func1(11,3));
        System.out.println("1-8= " + a.func1(1,8));


        System.out.println("---------------------");
        B b = new B();
        //程序员的本意是 以为调用的是A中的func1方法 执行的是 11-3
        //但是实际上 不小心重写了 func1方法 那么就不会执行父类的了
        System.out.println("11+3=" + b.fun1(11,3)); //调用功能很明确 11+3

        System.out.println("11-3=" + b.func3(11,3));
    }
}

//创建一个更加基础的基类
class Base{
    //把更加基础的方法 和成员 写到Base类中
}

//让A类 基础 更加基础的Base类
class A extends Base{
    public int func1(int num1,int num2){
        return num1-num2;
    }
}

class B extends Base{
    // 如果 B类使用到 A类的方法 使用 组合的关系
    private A a = new A();

    public int fun1(int a,int b){
        return a+b;
    }

    public int func2(int a,int b){
        return fun1(a,b)+9;
    }

    //假如 我们仍然想使用 A类的方法
    public int func3(int a,int b){
        return this.a.func1(a,b);
    }

}